// 计算正方形面积
// 计算创建正方形对象，可以给构造器传递宽和高
// 也可以给构造器传递一个包含了宽和高的形状参数对象，这样需要用构造器重载

type type_ChartParam = {
  width?: number;
  height?: number;
  radius?: number;
};

class Square {
  public width: number;
  public height?: number; // ===修改第一步：将属性设置为可选属性

  constructor(width_: number, height_: number); // 重载签名
  constructor(value: type_ChartParam);
  // 实现签名
  constructor(valueOrWidth: any, height_?: number) { // ? 可选参数
    this.width = valueOrWidth;
    // number | undefined 类型的height_赋值给 number | undefined 正确
    this.height = height_;
  }

  public getArea(): number {
    // 修改第一步后发现s100错误：
    // return this.width * this.height; // s100 对象可能“未定义”。
    // 修改如下：
    // 使用this.height!去掉undefined属性【感叹号是非null和非undefined的类型断言，使用非空断言，则表示this.height肯定是存在的，从而不会产生编译问题】
    return this.width * this.height!;
  }
}

export {}
